{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "theoretical-desperate",
   "metadata": {},
   "source": [
    "# REST API Examples"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "copyrighted-valve",
   "metadata": {},
   "source": [
    "Here are some examples that illustrate how to use the BPTK REST API (you need to start the demonstration server from a console by running the `run_server.sh` script in this directory. The server should then be running on port 5000.\n",
    "\n",
    "There is a companion repository on [Github](https://github.com/transentis/sim-covid-dashboard) that contains the source code for a web-based dashboard that uses the COVID-Simulation via the REST API. The dashboard was built using React and [BPTK-Widgets](http://bptk.transentis.com). You can test the dashboard live on [www.covid-sim.com](http://www.covid-sim.com)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "innocent-soldier",
   "metadata": {},
   "outputs": [],
   "source": [
    "# find documentation for the requests library on https://docs.python-requests.org/\n",
    "import requests\n",
    "import json"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "referenced-cuisine",
   "metadata": {},
   "source": [
    "Get a list of scenarios that the server knows about:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "advance-garbage",
   "metadata": {},
   "outputs": [],
   "source": [
    "response = requests.get(\"http://localhost:5000/scenarios\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "canadian-destination",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Response [200]>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "response"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "chicken-argument",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'smSir': ['base',\n",
       "  'dashboard',\n",
       "  'avoid_the_peak',\n",
       "  'strong_social_distancing',\n",
       "  'weak_social_distancing']}"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "response.json()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "incorporated-therapist",
   "metadata": {},
   "source": [
    "Get the equations known to the dashboard scenario:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "hourly-indiana",
   "metadata": {},
   "outputs": [],
   "source": [
    "response = requests.post(\n",
    "    url=\"http://localhost:5000/equations\",\n",
    "    json = {\n",
    "    \"scenarioManager\": \"smSir\",\n",
    "    \"scenario\":\"dashboard\"\n",
    "}\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "contained-passion",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Response [200]>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "response"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "sensitive-alcohol",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'constants': ['infectivity',\n",
       "  'intensive_percentage',\n",
       "  'intensive_available',\n",
       "  'lethality',\n",
       "  'duration'],\n",
       " 'converters': ['contact_number',\n",
       "  'reproduction_rate',\n",
       "  'total_population',\n",
       "  'intensive_needed',\n",
       "  'contact_rate'],\n",
       " 'flows': ['recovery_rate', 'infection_rate', 'death_rate'],\n",
       " 'points': ['contact_rate_table'],\n",
       " 'stocks': ['recovered', 'deceased', 'susceptible', 'infectious']}"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "response.json()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "disabled-biography",
   "metadata": {},
   "source": [
    "Get some data for a scenario and some equations:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "retired-illness",
   "metadata": {},
   "outputs": [],
   "source": [
    "response = requests.post(\n",
    "    url=\"http://localhost:5000/run\",\n",
    "    json = {\n",
    "    \"scenario_managers\": [\n",
    "        \"smSir\"\n",
    "    ],\n",
    "    \"scenarios\": [\n",
    "        \"strong_social_distancing\"\n",
    "    ],\n",
    "    \"equations\": [\n",
    "        \"recovered\",\n",
    "        \"infectious\"\n",
    "    ]\n",
    "}\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "advanced-davis",
   "metadata": {},
   "outputs": [],
   "source": [
    "data=response.json()[\"smSir\"][\"strong_social_distancing\"][\"equations\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "first-affiliate",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "alien-proportion",
   "metadata": {},
   "outputs": [],
   "source": [
    "df=pd.DataFrame.from_dict(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "cultural-frame",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>recovered</th>\n",
       "      <th>infectious</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1.0</th>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>120.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2.0</th>\n",
       "      <td>6.000000e+00</td>\n",
       "      <td>157.559934</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3.0</th>\n",
       "      <td>1.387800e+01</td>\n",
       "      <td>201.203931</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4.0</th>\n",
       "      <td>2.393819e+01</td>\n",
       "      <td>249.693920</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5.0</th>\n",
       "      <td>3.642289e+01</td>\n",
       "      <td>300.880955</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1496.0</th>\n",
       "      <td>7.841640e+07</td>\n",
       "      <td>977.451290</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1497.0</th>\n",
       "      <td>7.841645e+07</td>\n",
       "      <td>927.673112</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1498.0</th>\n",
       "      <td>7.841650e+07</td>\n",
       "      <td>880.429961</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1499.0</th>\n",
       "      <td>7.841654e+07</td>\n",
       "      <td>835.592739</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1500.0</th>\n",
       "      <td>7.841658e+07</td>\n",
       "      <td>793.038920</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1500 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           recovered  infectious\n",
       "1.0     0.000000e+00  120.000000\n",
       "2.0     6.000000e+00  157.559934\n",
       "3.0     1.387800e+01  201.203931\n",
       "4.0     2.393819e+01  249.693920\n",
       "5.0     3.642289e+01  300.880955\n",
       "...              ...         ...\n",
       "1496.0  7.841640e+07  977.451290\n",
       "1497.0  7.841645e+07  927.673112\n",
       "1498.0  7.841650e+07  880.429961\n",
       "1499.0  7.841654e+07  835.592739\n",
       "1500.0  7.841658e+07  793.038920\n",
       "\n",
       "[1500 rows x 2 columns]"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "abandoned-bridge",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:>"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWoAAAEDCAYAAAAcI05xAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAjgklEQVR4nO3deZhcdZ3v8fe3qvfu7Gm2BEhESBSyYYNARlkFUW549CbDNiwXnAzCaBxGBfQZuTo+17kXnhnRizgRQcEISkBkuMgiqxIEEwiyJBggITRbks7S6aW6u6q+949zqtMkvVSnu+qc7vq8nqeeqq46y7dOd33r19/f7/yOuTsiIhJfiagDEBGR/ilRi4jEnBK1iEjMKVGLiMScErWISMwpUYuIxFzBErWZ3Wxmm8zspTyW/Q8zWx3e/mpm2wsVl4jISGOFGkdtZp8EWoBb3f2IQaz3JWCeu19ckMBEREaYgrWo3f1JYGvP58zsEDN7wMxWmdkfzGxmL6ueA9xeqLhEREaasiLvbylwqbuvM7OPAz8CTsq9aGYHA9OBR4scl4hIbBUtUZtZHXAccKeZ5Z6u3G2xs4Hl7p4pVlwiInFXzBZ1Atju7nP7WeZs4PLihCMiMjIUbXieuzcD681sEYAF5uReD+vVE4CnixWTiMhIUMjhebcTJN0ZZtZoZpcA5wGXmNkLwMvAmT1WORu4wzWdn4jIBxRseJ6IiAwPnZkoIhJzBelMnDx5sk+bNq0QmxYRGZVWrVq1xd3re3utIIl62rRprFy5shCbFhEZlczszb5eU+lDRCTm8krUZvZPZvaymb1kZrebWVWhAxMRkcCAidrMpgBfBhrCyZWSBEPpRESkCPKtUZcB1WbWBdQA7wx2R11dXTQ2NpJKpQa7qvSiqqqKqVOnUl5eHnUoIlJgAyZqd3/bzK4DNgLtwEPu/tDuy5nZYmAxwEEHHbTHdhobGxkzZgzTpk2jx1wfshfcnaamJhobG5k+fXrU4YhIgeVT+phAcAbhdOAAoNbM/m735dx9qbs3uHtDff2eI0xSqRSTJk1Skh4GZsakSZP034lIicinM/EUYL27b3b3LuBuglnwBk1JevjoWIqUjnxq1BuBY8yshqD0cTKgQdIiMmJls05TayfvN6doTnXR1pGhtTNNW2eGdCZLJuuks07WnUyW8D74GSA380b3BBzhEzWVZVx6/CHDHm8+NepnzGw58ByQBp4nuACAFEldXR0tLS1RhyEyYm1qTvHwmvf58/qtvPROM282tdKVGd55jsxgcl1lNIkawN2vAa4Z9r1HxN1xdxKJ6M73SafTlJUV+wI7IqXlxcYd/PDRdTy85n3cYd+xlcyaMo5TPrIvB4yvYt+xVYyrLqe2ooyayiQ1FUnKEgmSCSNpRjIZ3CcSBPdm5KqOxSw/lkym2LBhA6eddhof//jHWbVqFX/7t3/LfffdR0dHB5/73Of49re/DcCtt97Kddddh5kxe/ZsbrvtNjZs2MDFF1/Mli1bqK+v55ZbbmHcuHHMnj2b9evXk0gkaG1tZebMmbzxxhts3LiRyy+/nM2bN1NTU8NPfvITZs6cyUUXXURVVRXPP/888+fP5/LLL+91ufXr13PuuefS0tLCmWeeOcA7E5HdpTNZrn3wVX7yhzcYU1XOZSccwoI5Uzhs37oR2b8TSaL+9n+9zCvvNA/rNj96wFiu+W+H97vMunXr+PnPf05zczPLly/n2Wefxd1ZsGABTz75JJMmTeK73/0uK1asYPLkyWzdGlyb90tf+hIXXnghF154ITfffDNf/vKXueeee5g7dy5PPPEEJ554Ivfddx+nnXYa5eXlLF68mB//+McceuihPPPMM1x22WU8+mhwGcjGxkZWrFhBMpnk5JNP7nW5JUuW8MUvfpELLriAG264YViPk8hol+rK8I+/fI7fr9nEOUcfxDc+M5MxVSP7fIOSaVEDHHzwwRxzzDF89atf5aGHHmLevHkAtLS0sG7dOl544QUWLVrE5MmTAZg4cSIATz/9NHfffTcA559/Pl//+tcBOOuss/jVr37FiSeeyB133MFll11GS0sLK1asYNGiRd377ejo6H68aNEikslkv8s99dRT3HXXXd37u/LKKwt1SERGFXfn68v/wu/XbOJfzzyc84+dFnVIwyKSRD1Qy7dQamtrgeCXefXVV/MP//APH3j9hz/84aC2t2DBAr7xjW+wdetWVq1axUknnURrayvjx49n9erV/caQzWb7XW4k/nsmErVfPruRe194h6+dNmPUJGko0dnzTjvtNG6++ebukRRvv/02mzZt4qSTTuLOO++kqakJoLv0cdxxx3HHHXcAsGzZMj7xiU8AwWiMo446iiVLlnDGGWeQTCYZO3Ys06dP58477wSCL4UXXnhhjxj6W27+/Pkf2J+IDOz95hTfu38txx0yictOGP6RF1EqyUR96qmncu6553Lssccya9YsFi5cyM6dOzn88MP55je/yfHHH8+cOXO44oorgKClfcstt3R3Ll5//fXd2zrrrLP4xS9+wVlnndX93LJly/jpT3/KnDlzOPzww/ntb3/baxx9LXf99ddzww03MGvWLN5+++0CHgmR0eNHj71GqivD//rcrFH3H2lBrpnY0NDgu184YM2aNXzkIx8Z9n2VMh1TkcD7zSk+8X8e478fOYXvfX521OHsFTNb5e4Nvb1Wki1qERld7nj2LboyWb54/IejDqUglKhFZETLZp07V73F/EMmc9CkmqjDKQglahEZ0Z7dsJXGbe0sapgadSgFo0QtIiPaw6+8T0VZglM+sm/UoRSMErWIjGiPrt3EsR+aRG3l6D1/T4laREas9VtaWb+llZNm7hN1KAVVUon6uOMGvt7BH/7wBw4//HDmzp1Le3v7oLZ/zz338Morr3T//K1vfYvf//73g45TRPLz1GtbADj+sD2vKjWalFSiXrFixYDLLFu2jKuvvprVq1dTXV09qO3vnqi/853vcMoppww6ThHJz6o3tzG5rpKDR+loj5ySStR1dXUAPP7445xwwgksXLiQmTNnct555+Hu3HTTTfz617/mX/7lXzjvvPMAuPbaaznqqKOYPXs211yza0ruW2+9ldmzZzNnzhzOP/98VqxYwb333svXvvY15s6dy+uvv85FF13E8uXLAXjkkUeYN28es2bN4uKLL+6egGnatGls2RK0ClauXMkJJ5wAwBNPPMHcuXOZO3cu8+bNY+fOncU6TCIjxqo3t9Fw8IRRdybi7gasvpvZDOBXPZ76EPAtd//+Xu/1d1fBey/u9eq92m8WnP5veS/+/PPP8/LLL3PAAQcwf/58nnrqKb7whS/wxz/+kTPOOIOFCxfy0EMPsW7durymQ504cSILFizoXrenVCrFRRddxCOPPMJhhx3GBRdcwI033shXvvKVPuO77rrruOGGG5g/fz4tLS1UVVXt7ZERGZU27UyxcWsb5x9zcNShFNyALWp3f9Xd57r7XOBjQBvwm0IHVmhHH300U6dOJZFIMHfuXDZs2LDHMg899FD3dKhHHnkka9euZd26dTz66KO9Tofal1dffZXp06dz2GGHAXDhhRfy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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "round-classics",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
